<?php
namespace App\Common\Cla\Weixin\Pay\Order\Log;

use App\Common as com;

/**
 * @method self goWaitSaveDataManagerClosure( \Closure $fn ) $fn( com\Model\XXX\DataManager $dataManager )
 */
class Save extends com\Cla\ClaBase\SaveV2 {

	/**
	 * @var nameXXX\Save
	 */
	// private nameXXX\Save $saverAsXXX;

	/**
	 * 注入saver->xxx
	 * @param nameXXX\Save $saverAsXXX
	 * @return self
	 */
	/*
	public function injectSaverAsXXX( nameXXX\Save $saverAsXXX ):self {
		$this->saverAsXXX = $saverAsXXX;
		//
		return $this;
	}
	*/

	/**
	 * 获取saver->xxx
	 * @return nameXXX\Save
	 */
	/*
	public function goSaverAsXXX(  ):nameXXX\Save {
		return $this->saverAsXXX;
	}
	*/

	/**
	 * 待保存的DataManager
	 * @return com\Model\WxPayNotifyLog\DataManager
	 */
	public function goWaitSaveDataManager(  ):com\Model\WxPayNotifyLog\DataManager {
		return $this->goPool( __METHOD__, function(){
			return com\Model\WxPayNotifyLog::dataManager();
		} );
	}

	/**
	 * 检查是否允许保存
	 * @param bool $isCreate 是否为创建模式
	 * @return string|bool [true]允许 [false]不允许创建 [string]不允许，并返回错误提示
	 */
	/*
	protected function checkSaveReStr( bool $isCreate ):string|bool {
		$isExist = $this->goWaitSaveDataManager()->newData_XXX()->isExist();
		if( $isExist ){
			return '已存在';
		}
		//
		return true;
	}
	*/

	/**
	 * 创建并返回数据对象
	 * @return XXX\OfId 数据对象
	 * @throws
	 */
	/*
	public function saveReOfIdObj():XXX\OfId {
		return XXX\OfId::makeOfNew( $this->saveReMainId() );
	}
	*/

	/**
	 * 事件->保存前
	 * @param bool $isCreate 是否为创建模式
	 * @return bool 是否继续执行
	 */
	/*
	protected function eventSaveBefore( bool $isCreate ):bool {
		return true;
	}
	*/

	/**
	 * 事件->保存前(事务内)
	 * @param bool $isCreate 是否为创建模式
	 * @return bool 是否继续执行
	 */
	/*
	protected function eventSaveBeforeAsTransaction( bool $isCreate ):bool {
		if( $isCreate ){
			// 保存主数据
			$mainId = $this->goSaverAsXXX()->saveReMainId();
			//
			$this->goWaitSaveDataManager()->setData_XXXId( $mainId );
		}else{
			// 保存主数据
			$this->goSaverAsXXX()->save();
		}
		//
		return true;
	}
	*/

	/**
	 * 事件->保存后
	 * @param bool $isCreate 是否为创建模式
	 * @param int $dataId
	 * @return bool 是否继续执行
	 */
	/*
	protected function eventSaveLater( bool $isCreate, int $dataId ):bool {
		return true;
	}
	*/

	/**
	 * 事件->保存后(事务内)
	 * @param bool $isCreate 是否为创建模式
	 * @param int $dataId
	 * @return bool 是否继续执行
	 */
	/*
	protected function eventSaveLaterAsTransaction( bool $isCreate, int $dataId ):bool {
		return true;
	}
	*/

	// ===============================
	//
	//
	// 下面为静态方法
	//
	//
	// ===============================

	/**
	 * @param array $data
	 * @return $this
	 */
	public static function makeOfCreate( array $data ):self {
		$saver = self::make();
		//
		// $saver->injectSaverAsXXX();
		//
		$saver->goWaitSaveDataManager()
			->setData_Data( $data );
		//
		return $saver;
	}

	/**
	 * @param int $id
	 * @return $this
	 */
	public static function makeOfUpdate( int $id ):self {
		$saver = self::make();
		$saver->goWaitSaveDataManager()
			->whereData_Id( $id );
		return $saver;
	}

}
